#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <map>
#include <vector>

using namespace std;
using LL = long long;

int n;

// 对于异或相同的情况，我们可以这么想，假如n = 4，那么我们希望a[1] ^ a[3] = a[2] ^ a[4]。
// 如果奇偶位上两个数异或和 = 另外两个数，那么最终一定是相同的。
// 当n = 8时，a[1] ^ a[3] = a[2] ^ a[4]，且a[5] ^ a[7] = a[6] ^ a[8]，这样一定符合要求。
// 因此我们需要以四组位循环节去构造一个长度为n的数组。
// 有一种简单的构造方法：我们让每一组内的异或和都为1，比如2 ^ 3 = 1 ，4 ^ 5 = 1，6 ^ 7 = 1，
// 每次 + 2，这样就可以了，然后我们按照顺序排下去就可以保证不重复。
// 但是有两种特殊情况，n不是4的整数倍怎么办呢？
// 当n = 4 * k + 1，我们只需要在末尾加上一个0即可。
// 当n = 4 * k + 3，我们该怎么办呢？也就是说我们多了一个奇数位和一个偶数位，显然只靠这两个数是没法完成的。
// 因此我们把之前用过的2个奇数位和2个偶数位抠出来，也就是让三个奇数位和三个偶数位的异或和相同，我们在前6项直接随便找6个数使得三个数的异或和等于另外三个数即可

int main(){
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);

    int T;
    int k = 40;
    scanf("%d", &T);
    while(T--){
        scanf("%d", &n);
        k = 40;

        if(n == 3){
            cout << 2 << " " << 1 << " " << 3 << " ";
        }else if(n % 4 == 0){
            for(int i = 1; i <= n; i += 4){
                cout << k << " " << k + 2 << " " << k + 1 << " " << k + 3 << " ";
                k += 4;
            }
        }else if(n % 4 == 1){
            for(int i = 1; i <= n - 1; i += 4){
                cout << k << " " << k + 2 << " " << k + 1 << " " << k + 3 << " ";
                k += 4;
            }
            cout << "0" << " ";
        }else if(n % 4 == 2){
            // 4 1 2 12 3 8
            cout << 4 << " " << 1 << " " << 2 << " " << 12 << " " << 3 << " " << 8 << " ";
            n -= 6;
            for(int i = 1; i <= n; i += 4){
                cout << k << " " << k + 2 << " " << k + 1 << " " << k + 3 << " ";
                k += 4;
            }
        }else{
            cout << 4 << " " << 1 << " " << 2 << " " << 12 << " " << 3 << " " << 8 << " ";
            n -= 7;
            for(int i = 1; i <= n; i += 4){
                cout << k << " " << k + 2 << " " << k + 1 << " " << k + 3 << " ";
                k += 4;
            }
            cout << "0" << " ";
        }

        cout << endl;
    }

    return 0;
}